/*

This file is part of org-json.

org-json is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

using System;

namespace Org.JSON
{
	public class String : Value
	{
		private string data;
		public String(string data)
		{
			this.data = data;
		}
		
		public string Value { get {return this.data ; }}
		
		public override void Serialize(Writeable output)
		{
			output.Write("\"");
			
			foreach(var chr in this.data)
			{
				if(chr == '\\')
				{
					output.Write("\\\\");
				}
				else if(chr == '\"')
				{
					output.Write("\\\"");
				}
				else if(chr == '\n')
				{
					output.Write("\\n");
				}
				else if(chr == '\r')
				{
					output.Write("\\r");
				}
				else if(chr == '\f')
				{
					output.Write("\\f");
				}
				else if(chr == '\b')
				{
					output.Write("\\b");
				}
				else if(chr == '\t')
				{
					output.Write("\\t");
				}
				else if(((int)chr) < 32)
				{
					output.Write("\\u");
					output.Write(string.Format("{0:X4}", (int)chr));
				}
				else
				{
					output.Write(chr.ToString());
				}
			}
			output.Write("\"");
		}
	}
}
